package com.wl.user.login.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wl.entity.Lvuser;
import org.apache.ibatis.annotations.*;

import java.util.Date;
import java.util.List;

@Mapper
public interface LvuserMapper extends BaseMapper<Lvuser> {
    // 用户注册
    @Insert("INSERT INTO lvuser(head, uname, zhanghao, password, email, create_at, update_at) " +
            "VALUES (#{head}, #{uname}, #{zhanghao}, #{password}, #{email}, #{createAt}, #{updateAt})")
    void insert(
            String head, String uname, String zhanghao, String password, String email,
            Date createAt, Date updateAt  // ✅ 参数类型是 Date，不是 @Data
    );

    // 用户登录 - 改为返回用户信息
    @Select("select * from lvuser where head=#{head} zhanghao = #{zhanghao} and password = #{password}")
    Lvuser login(String head,String zhanghao, String password);

    // 检测账号是否已存在 - 改为返回计数
    @Select("SELECT COUNT(*) FROM lvuser WHERE zhanghao = #{zhanghao}")
    int countByZhanghao(String zhanghao);

    // 检测邮箱是否已存在 - 改为返回计数
    @Select("SELECT COUNT(*) FROM lvuser WHERE email = #{email}")
    int countByEmail(String email);

    // 根据账号查询用户信息
    @Select("select * from lvuser where zhanghao = #{zhanghao}")
    Lvuser findByZhanghao(String zhanghao);

    // 根据邮箱查询用户信息
    @Select("select * from lvuser where email = #{email}")
    Lvuser findByEmail(String email);

    // 查询所有用户信息
    @Select("SELECT * FROM lvuser WHERE zhanghao = #{zhanghao}")
    List<Lvuser> selectByZhanghao(String zhanghao);

    /**
     * 更新用户基本信息（用户名、性别、生日、简介）
     * @param zhanghao 账号（作为更新条件）
     * @param uname 新用户名
     * @param gender 新性别（0:保密,1:男,2:女）
     * @param birthday 新生日（格式：yyyy-MM-dd）
     * @param bio 新个人简介
     */
    @Update("UPDATE lvuser SET " +
            "uname = COALESCE(#{uname}, uname), " +
            "gender = COALESCE(#{gender}, gender), " +
            "birthday = COALESCE(#{birthday}, birthday), " +
            "bio = COALESCE(#{bio}, bio), " +
            "update_at = NOW() " +  // 使用下划线
            "WHERE zhanghao = #{zhanghao}")
    int updateBasicInfo(String zhanghao, String uname, Integer gender, String birthday, String bio);

    /**
     * 修改头像
     * @param zhanghao 账号
     * @param head 新头像路径（如：img/boy2.png）
     */
    @Update("UPDATE lvuser SET head = #{head}, update_at = NOW() WHERE zhanghao = #{zhanghao}")
    int updateHead(String zhanghao, String head);

    /**
     * 修改邮箱（需先验证验证码）
     * @param zhanghao 账号
     * @param email 新邮箱
     */
    @Update("UPDATE lvuser SET email = #{email}, update_at = NOW() WHERE zhanghao = #{zhanghao}")
    int updateEmail(String zhanghao, String email);

    /**
     * 修改密码
     * @param zhanghao 账号
     * @param newPassword 新密码（需在前端加密）
     */
    @Update("UPDATE lvuser SET password = #{newPassword}, update_at = NOW() WHERE zhanghao = #{zhanghao}")
    int updatePassword(String zhanghao, String newPassword);

    /**
     * 修改账号（一年只能修改一次，需额外校验）
     * @param oldZhanghao 原账号
     * @param newZhanghao 新账号
     */
    @Update("UPDATE lvuser SET zhanghao = #{newZhanghao}, update_at = NOW() WHERE zhanghao = #{oldZhanghao}")
    int updateZhanghao(String oldZhanghao,String newZhanghao);

    //用户注销
    @Delete("DELETE from lvuser where zhanghao = #{zhanghao}")
    int deleteZhanghao(String zhanghao);

    //账号是唯一的
    @Select("SELECT * FROM lvuser WHERE zhanghao = #{zhanghao} LIMIT 1")
    Lvuser findOneByZhanghao(String zhanghao);
}
